#ifndef __MATRIX3X3_H__
#define __MATRIX3X3_H__
#include "point.h"
#include <string>

class Matrix4x4{
	private:
        float m[4][4];
        static const float identity[16];
        static const int MATRIX_SIZE =  4;
        static const int VSIZE =  16;

    public:
    	// Construye la matriz especificamente como una de rotacion
    	Matrix4x4(float theta,Point axis);
    	// Construye la matriz especificamente como una de translacion
    	Matrix4x4(float dx,float dy,float dz);
    	// Construye la matriz especificamente como una de escalado
    	// (el ultimo parametro es para distinguirlo de la translacion nada mas)
    	Matrix4x4(float ex,float ey,float ez,bool);

    	Matrix4x4();
        ~Matrix4x4();

        float* getMatrixv(){
        	return (float*)this->m;
        }

        void loadIdentity();
		Matrix4x4& operator*=(Matrix4x4& matrix);
        Point operator*(const Point& point)const;
};

#endif // __MATRIX3X3_H__
